from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse,HttpResponseNotAllowed,JsonResponse,FileResponse
from product.models import Product
from django.urls import path,register_converter,re_path
import json

def index(request,year,day):
    print(year,day)
    return HttpResponse("首页")

def year_month_phone(request,year,month,phone):
    print(year,month,phone)
    return HttpResponse(f"手机生产于{year}{month}，手机号{phone}")

def search_view(request):
    # url:  ?keyword1=value1&keyword2=value2
    # http://127.0.0.1:8000/search?keyword=python&category=book&page=2
    # 获取查询字符串
    print(request.GET) # <QueryDict: {'keyword': ['python'], 'category': ['book'], 'page': ['2']}>
    keyword = request.GET.get('keyword', '')
    category = request.GET.get('category', '')
    
    # 如果有多个同名的查询字符串，使用getlist()方法获取所有的值
    # keyword = request.GET.getlist('keyword', '')
    # for i in keyword:
    #     if i == 'python':
    #         return HttpResponse("python是最好的语言。")
    return HttpResponse(f"查询的关键词是：{keyword}, 分类是：{category}")

def post_view(request):
    # 用于post请求
    # 表单提交的数据form-data
    # request.POST是一个类似于字典的对象，用于存储表单提交的数据
    # username = request.POST.get('username')
    # password = request.POST.get('password')
    # return HttpResponse(f"用户名是：{username}, 密码是：{password}")

    # 如果数据是json格式，可以使用request.body来获取
    json_str = request.body.decode('utf-8')
    # 把json字符串转换成python字典
    data = json.loads(json_str)
    print(data)
    username = data.get('username')
    pwd = data.get('password')
    content_type = request.META.get('CONTENT_TYPE')
    print(content_type)  # application/json
    # return HttpResponse("ok")
    return HttpResponse(f"用户名是：{username}, 密码是：{pwd}")

def LoginView(requests):
    # 支持post和get请求
    # 登录页面
    # print(requests.method)  # GET POST POST
    if requests.method == 'POST':
        username = requests.POST.get('username')
        password = requests.POST.get('password')
        # 文件上传
        # request.FILES 用于处理文件上传的请求数据
        files = requests.FILES.get('pic')
        # print(files)
        if files:
            # 保存文件到服务器
            print("文件名:", files.name)
            print("文件大小:", files.size)
            
            with open(files.name, 'wb+') as f:
                for chunk in files.chunks():
                    f.write(chunk)
                    return HttpResponse(f"{files.name}文件上传成功")
        return HttpResponse(f"用户名是：{username}, 密码是：{password}")  
    elif requests.method == 'GET':
        username = requests.GET.get('username')
        password = requests.GET.get('password')
        # 获取当前的用户对象
        user = requests.user
        # path
        request_path = requests.path
        
        # 构造字典数据
        data = {
            'username': username,
            'user': str(user),
            'password': password,
            'path': request_path
        }
        # # 把字典转换成json字符串
        # json_str = json.dumps(data)
        # # 返回json字符串
        # return HttpResponse(json_str, status=200,content_type='application/json')
        #----------------------------------------------------------------------------
        # 直接返回字典
        # return JsonResponse(data,status=200)
        #---------------------------------------
        
        # 重定向到其他页面
        # 路径反解析，结合视图函数的名称，返回对应的URL路径
        reverse_url = reverse('del')
        # print(reverse_url)  # /index/
        return redirect(reverse_url)
        
        # return HttpResponse(f'欢迎登录，{user},当前所在的路径是：{request_path}',status=200,content_type='text/html')
    else:
        # raise Exception("不支持的请求方法")
        # return HttpResponseNotAllowed("不支持的请求方法")
        return HttpResponse("不支持的请求方法",status=405)
    # return HttpResponse("登录")

def download_file(request):
    # 下载文件
    # 提供文件下载功能
    # 1.读取文件内容
    file = open(r'E:\1_python全栈班\5web开发32期\32期\shopping\hk_shopping\images\极限竞速_地平线3_Forza_Horizon_34K游戏精选高清壁纸.jpg','rb')
    # 创建fileresponse对象
    response = FileResponse(
        
        file, # 文件对象
        filename='极限竞速_地平线3_Forza_Horizon_34K游戏精选高清壁纸.jpg', # 下载时显示的 文件名
        content_type='image/jpeg', # 文件类型
        as_attachment=True, # 是否作为附件下载(强制下载，而不是在浏览器中打开)
        status=200 # 响应状态码  
        )
    return response

    # 2.设置响应头

# def meta_view(request):
    # # 获取请求头信息
    # content_type = request.META.get('Content_Type')
    # print(content_type)
    # return HttpResponse("ok")

# Create your views here.
def productView(request):
    
    # 数据库，把数据库的数据进行返回

    """
    数据增加方法，.save()和.create()方法
    保存到模型类中
    """
    try:
        # # 创建product模型实例对象
        # product = Product(
        #     product_name="小米14Pro",
        #     cover =  "",
        #     price = 5000,
        #     popularity = 100,
        #     stock=100,
        #     is_active = False,
        # )
        # # 将创建的产品实例保存到数据库中
        # product.save()

        # create() 一步直接保存到数据库 直接创建并保存到数据库
        # 通过模型管理器Model.objects 调用  
        # Model Manager 作用： 模型与数据库交互的核心接口
        # 封装了所有数据库查询和操作的方法 
        # 每一个Django模型默认都有一个名为objects的管理器
        Product.objects.create(
            product_name="小米19Pro",
            cover =  "",
            price = 5000,
            popularity = 100,
            stock=100,
            is_active = False,
            )
        
    except Exception as e:
        return HttpResponse(f"异常原因：{e}")
        

    return HttpResponse("ok")


def productUpdateView(request):
    """
    修改方法
    save() 和 .update()
    1.查询实例
    2.修改字段
    3.保存
    """

    # 修改单个模型实例并保存
    # 1.查询实例 .get() 获取单个实例对象 通过主键（id）查询  在Django里面 pk=id 字段
    # 模型类.objects.get()
    # 模型实例（单个结果）
    product = Product.objects.get(pk=5)
    
    # 2.修改字段 给类属性重新赋值
    product.stock = 900
    product.price = 5500
    product.popularity = 100000
    product.is_active = True
    # 3.保存
    product.save()

    # filter() 查询方法
    #  查询集(多个结果)(QuerySet)  filter() 返回出来的结果
    # a = Product.objects.filter(pk=5)
    # print(a)

    # Product.objects.filter(pk=5).update(stock=200, price=3000, is_active=True)


    return HttpResponse("ok")

def ProductDelView(request):
    """
    删除方法 delete()
    """
    # 单个模型实例的删除
    Product.objects.get(pk=8).delete()

    # Product.objects.filter(pk=9).delete()
    return HttpResponse('ok')